Field-programmable gate arrays (FPGAs) are computer processing circuits that are designed to be configured by a customer or a designer after manufacturing; hence, the term “field-programmable” is used. FPGAs include configurable logical blocks, data interconnects, and other programmable digital logic resources. An FPGA may be configured to perform various tasks typically performed by an application-specific integrated circuit (ASIC) or other fixed hardware resource. The FPGA configuration is generally specified using a hardware description language (HDL), similar to that used for an application-specific integrated circuit (ASIC).
FPGAs contain an array of programmable logic blocks, and a hierarchy of reconfigurable interconnects that allow the blocks to be “wired together,” like many logic gates that can be inter-wired in different configurations. Logic blocks can be configured to perform complex combinational functions, or merely to provide functionality of simple logic gates like AND and XOR. In most FPGAs, logic blocks also include memory elements, which may be simple flip-flops or more complete blocks of memory.
As the size, capabilities, and speed of FPGAs has increased, FPGAs have been used to implement increased functionality to the point where some FPGAs are now marketed as full systems on chips (SoC). An FPGA has been used to implement a soft microprocessor, such as the Xilinx® MicroBlaze or Altera® Nios II. Particularly with the introduction of dedicated multipliers into FPGA architectures in the late 1990s, applications which had traditionally been the sole reserve of digital signal processors began to incorporate FPGAs instead. FPGAs are currently being used to accelerate hardware functionality, where the FPGA accelerates certain parts of an algorithm and shares part of the computation between the FPGA and a generic processor.
FPGAs have the following characteristics: high performance per watt per dollar, flexibility, upgradability, low development cost, and a migration path to lower cost as the application matures and usage increases. FPGAs are an important technology for implementing application acceleration (‘accelerators’) and virtual functions (‘VF’) on client and server class platforms. Network Function Virtualization (NFV) is an example of an industry trend toward consolidation of network ‘boxes’ on server class platforms with FPGA-based NFV integration. The emerging Internet of Things and ‘smart’ devices represent another class of platform that can take advantage of FPGA-based accelerators.